package com.cy.pj.health.controller;


import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;

@Controller
public class HealthController {//Handler(通过此对象处理DispatcherServlet分发过来的请求)

    @RequestMapping("/doHeal")
    public ModelAndView dohealth1(){//此方法由DispatcherServlet对象通过反射调用
        ModelAndView mv=new ModelAndView();
        mv.setViewName("default");//viewname
        mv.addObject("username", "chenzishu");
        mv.addObject("state", "亚健康");
        //return "default";//viewname
        return mv;//返回值会交给DispatcherServlet对象进行处理
        //DispatcherServlet对象会调用viewresolver对结果进行解析
        //基于viewname找到对应的view页面（prefix+viewname+suffix）
        //将module中的数据填充到view页面上
        //返回一个带有module数据的页面给DispatcherServlet
        //DispatcherServlet将带有module数据的页面响应到客户端
    }
    @RequestMapping("/doHealth")
    public String dohealth(Model model){//此方法由DispatcherServlet对象通过反射调用

        model.addAttribute("username", "chenzishu");
        model.addAttribute("state", "亚健康");
        return "default";//viewname
        //return "default";//返回值会交给DispatcherServlet对象进行处理
        //DispatcherServlet对象会调用viewresolver对结果进行解析
        //基于viewname找到对应的view页面（prefix+viewname+suffix）
        //将module中的数据填充到view页面上
        //返回一个带有module数据的页面给DispatcherServlet
        //DispatcherServlet将带有module数据的页面响应到客户端
    }
    //请求方式
    //请求url
    //请求参数
    @RequestMapping("health.html")
    @ResponseBody
    //当使用此注解描述控制层方法时，用于告诉spring框架，这个方法返回值可以按照特定格式（尽量转换为json串响应到客户端）进行转换
    //将转换以后的结果写到response对象的响应体中
    //方法的返回值不在封装为ModelAndView对象，不再交给解析器进行解析，而是基于response对象响应到客户端
    public Map<String,Object> dohealth(){
        Map<String,Object> map=new HashMap<>();
        map.put("username", "tony");
        map.put("state", true);
        return map;
    }
    @RequestMapping("/doPrint")
    //@ResponseBody
    public void doPrint(HttpServletResponse response) throws Exception {
        Map<String,Object> map=new HashMap<>();
        map.put("username", "刘德华");
        map.put("state", true);
        //将map中的数据转换为json格式字符串
        ObjectMapper om=new ObjectMapper();
        String jsonStr=om.writeValueAsString(map);
        System.out.println("jsonStr="+jsonStr);
        //将字符串响应到客户端
        //设置响应数据的编码
        response.setCharacterEncoding("utf-8");
        //告诉客户端要向它响应的数据类型为text/html
        response.setContentType("text/html;charset=utf-8");
        response.getWriter().println(jsonStr);
    }
}
